//package com.studerb.old;
//
//import java.io.Serializable;
//import java.lang.reflect.ParameterizedType;
//import java.util.List;
//
//import org.apache.log4j.Logger;
//import org.hibernate.Criteria;
//import org.hibernate.HibernateException;
//import org.hibernate.LockMode;
//import org.hibernate.Session;
//import org.hibernate.criterion.Criterion;
//import org.hibernate.criterion.Example;
//import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
//
//import com.studerb.exceptions.DBException;
//import com.studerb.service.HibernateService;
//import com.studerb.util.*;
//
///**
// * @author studerb Basic CRUD operations for classes in the
// * @see com.infosys.electronicsweb.model com.studerb.model
// * @param <T>
// *            the type of com.studerb.model object used in crud operations
// * @param <ID>
// *            the id of a specific object or 'entity' - usually accessed via
// *            <code>someObject.getId()</code>
// */
//
//public abstract class GenericHibernateDAO<T, ID extends Serializable> implements GenericDAO<T, ID> {
//	private Class<T> persistentClass;
//
//	private Session session;
//
//	public GenericHibernateDAO() {
//		this.persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass())
//				.getActualTypeArguments()[0];
//	}
//
//	public void setSession(Session s) {
//		this.session = s;
//	}
//
//	protected Session getSession() {
//		if (session == null)
//			session = getSessionFactory().getCurrentSession();
//		return session;
//	}
//
//	public Class<T> getPersistentClass() {
//		return persistentClass;
//	}
//
//	public T findById(ID id, boolean lock) {
//		T entity;
//		if (lock)
//			entity = (T) getSession().load(getPersistentClass(), id, LockMode.UPGRADE);
//		else
//			entity = (T) getSession().load(getPersistentClass(), id);
//
//		return entity;
//	}
//
//	@SuppressWarnings("unchecked")
//	public List<T> findAll() throws DBException {
//		try {
//			return findByCriteria();
//		} catch (HibernateException e) {
//			throw new DBException("Caught hibernateexception: " + e);
//		}
//	}
//
//	@SuppressWarnings("unchecked")
//	public List<T> findByExample(T exampleInstance, String... excludeProperty) throws DBException {
//		try {
//			Criteria crit = getSession().createCriteria(getPersistentClass());
//			Example example = Example.create(exampleInstance);
//			for (String exclude : excludeProperty) {
//				example.excludeProperty(exclude);
//			}
//			crit.add(example);
//			return crit.list();
//		} catch (HibernateException e) {
//			throw new DBException("Caught hibernateexception: " + e);
//		}
//	}
//
//	/*
//	 * (non-Javadoc)
//	 * 
//	 * @see com.infosys.electronicsweb.dao.GenericDao#makePersistent(java.lang.Object)
//	 *      Save updates or creates
//	 */
//	@SuppressWarnings("unchecked")
//	public T makePersistent(T entity) throws DBException {
//		try {
//			getSession().save(entity);
//			return entity;
//		} catch (HibernateException e) {
//			throw new DBException("Caught hibernateexception: " + e);
//		}
//	}
//
//	public void makeTransient(T entity) throws DBException {
//		try {
//			getSession().delete(entity);
//			flush();
//		} catch (HibernateException e) {
//			throw new DBException("Caught hibernateexception: " + e);
//		}
//	}
//
//	public void flush() throws DBException {
//		try {
//			getSession().flush();
//		} catch (HibernateException e) {
//			throw new DBException("Caught hibernateexception: " + e);
//		}
//
//	}
//
//	public void clear() throws DBException {
//		try {
//			getSession().clear();
//		} catch (HibernateException e) {
//			throw new DBException("Caught hibernateexception: " + e);
//		}
//	}
//
//	/**
//	 * Use this inside subclasses as a convenience method.
//	 */
//	@SuppressWarnings("unchecked")
//	protected List<T> findByCriteria(Criterion... criterion) throws DBException {
//		try {
//			Criteria crit = getSession().createCriteria(getPersistentClass());
//
//			for (Criterion c : criterion) {
//				crit.add(c);
//			}
//			return crit.list();
//		} catch (HibernateException e) {
//			throw new DBException("Caught hibernateexception: " + e);
//		}
//	}
//}
